#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>

#define N 128

int main(int argc, char const *argv[])
{
    char buf[N] = {0};
    int ret, fd;
    if (argc != 2)
    {
        fprintf(stderr, "错误运行程序时请代入参数(./20-fifo_write filename)\n");
        exit(-1);
    }
    // 测试这个文件是否存在  , 存在返回为0 , 错误返回-1
    // 文件存在的话, 就不需要创建管道
    // 文件不存在则创建管道文件
    if (access(argv[1], F_OK) != 0) // 文件不存在
    {
        ret = mkfifo(argv[1], 0664);
        if (ret < 0)
        {
            perror("mkfifo");
            exit(-1);
        }
    }

    fd = open(argv[1], O_RDWR);
    if (fd < 0)//file descriptor
    {
        perror("open");
        exit(-1);
    }
    printf("fd=%d\n", fd);
    while (1)
    {
        printf(">:");
        fgets(buf, N, stdin);
        buf[strlen(buf) - 1] = '\0'; // 去除'\n';
        ret = write(fd, buf, N);
        if (ret < 0)
        {
            perror("write");
            exit(-1);
        }
        if (strncmp(buf, "quit", 4) == 0)
            break;
    }
    close(fd);

    return 0;
}
